package com.bjpowernode.day24.homework;

/**
 * 军队
 * 类在强制类型转换过程中，若果类转换成接口类型，类和接口之间不需要存在继承关系也可以转换。
 */
public class Army {

    /**
     * 武器数组
     */
    private Weapon[] weapons;

    /**
     * 创建军队的构造方法
     * @param count 武器的数量
     */
    public Army(int count){
        //动态初始化数组中每一个元素的默认值为null
        //武器数组有了，但是数组中没有武器。
        weapons = new Weapon[count];
    }

    /**
     * 将武器加入数组
     * @param weapon
     */
    public void addWeapon(Weapon weapon) throws WeaponIndexOutOfBounds {
        for (int i = 0; i < weapons.length; i++) {
            if(null == weapons[i]){
                //调用子类中特有的方法向下转型
                weapons[i] = weapon;
                System.out.println(weapon + "武器添加成功！");
                return;
            }
        }
        //程序执行到此处说明weapons数组已满，没有null了。
        throw new WeaponIndexOutOfBounds("武器数量以达到上限");
    }

    /**
     * 所有可攻击的武器攻击
     */
    public void attackAll(){
        //遍历数组
        for (int i = 0; i < weapons.length; i++) {
            if (weapons[i] instanceof Shotable){
                ((Shotable) weapons[i]).shot();
            }
        }
    }

    /**
     * 所有可移动的武器移动
     */
    public void moveAll(){
        //遍历数组
        for (int i = 0; i < weapons.length; i++) {
            if(weapons[i] instanceof Moveable){
                ((Moveable) weapons[i]).move();
            }
        }
    }
}
